package com.example.customer01.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.customer01.pojo.StudentCourse;

import java.util.List;

/**
 * 學生選課服務接口
 */
public interface StudentCourseService extends IService<StudentCourse> {

    /**
     * 分頁查詢選課記錄
     *
     * @param page    分頁參數
     * @param keyword 關鍵字
     * @return 分頁結果
     */
    IPage<StudentCourse> getStudentCoursePage(Page<StudentCourse> page, String keyword);

    /**
     * 創建選課記錄
     *
     * @param studentCourse 選課信息
     * @return 創建後的選課記錄
     */
    StudentCourse createStudentCourse(StudentCourse studentCourse);

    /**
     * 批量創建選課記錄
     *
     * @param studentCourses 選課信息列表
     * @return 創建後的選課記錄列表
     */
    List<StudentCourse> batchCreateStudentCourses(List<StudentCourse> studentCourses);

    /**
     * 刪除選課記錄
     *
     * @param id 選課記錄ID
     * @return 是否刪除成功
     */
    boolean deleteStudentCourse(Integer id);

    /**
     * 獲取學生的選課列表
     *
     * @param studentId 學生ID
     * @return 選課列表
     */
    List<StudentCourse> getStudentCourses(Integer studentId);

    /**
     * 獲取課程的學生列表
     *
     * @param courseId 課程ID
     * @return 選課列表
     */
    List<StudentCourse> getCourseStudents(Integer courseId);

    /**
     * 檢查學生是否已選修課程
     *
     * @param studentId 學生ID
     * @param courseId  課程ID
     * @return 是否已選修
     */
    boolean checkStudentCourse(Integer studentId, Integer courseId);

    /**
     * 查詢學生的選課詳情（包含課程信息）
     * @param studentId 學生ID
     * @return 選課詳情列表
     */
    List<StudentCourse> getStudentCoursesWithDetails(Integer studentId);
} 